var http = require('http'),
	url = require('url'),
	fs = require('fs'),
	util = require('util'),
	log = require('./util/log'),
	info = log.setting('info', './log/info.txt'),
	debug = log.setting('debug'),
	portHttp = 8000,
	portIo = 3000,
	io = require('socket.io').listen(portIo);

/** テキストファイルを読込んで表示する */
var pageTextFile = function(response, path, type){
	fs.readFile(path, function(err, data){
		if(err){
			/* ファイルが開けなかったら、「存在しないページ」を表示 */
			pageError404(response);
			return;
		}
		response.writeHead(
			200,
			{'Content-Type': type}
		);
		response.end(data);
	});
};

/** HTMLファイルを読込んで表示する */
var pageHtmlFile = function(response, path){
	pageTextFile(response, path, "text/html; charset=UTF-8");
};

/** TOPページを表示する */
var pageTop = function(response){
	response.writeHead(
		200,
		{'Content-Type': 'text/html; charset=UTF-8'}
	);
	response.end('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\n<html lang="ja"><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>トップページ</title></head><body><a href="/chat.html">チャットページへどうぞ</a></body></html>');
};

/** 存在しないページのときに表示する */
var pageError404 = function(response){
	response.writeHead(
		200,
		{'Content-Type': 'text/html; charset=UTF-8'}
	);
	response.end('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\n<html lang="ja"><html><meta http-equiv="content-type" content="text/html; charset=UTF-8"><head><title>存在しないページ</title></head><body>存在しないページです<br /><a href="/">トップページへどうぞ</a></body></html>');
};

/* 8000ポートで普通にHTML等を表示するサーバ */
var server = http.createServer(function(request, response){
	var path = url.parse(request.url).pathname;
	switch(path){
	case '/': /* トップページ */
		pageTop(response);
		break;
	case '/chat.html':  /* チャットページ */
		pageTextFile(response, "../client/chat.html");
		break;
	default: /* 存在しないページ */
		pageError404(response);
	}
});
server.listen(portHttp);

/* 3000ポートでsocket.ioを使ってリアルタイム通信するサーバ */
io.sockets.on('connection', function(socket){
	/* 接続したときの処理 */
	/* クライアントへメッセージ（キーワード 'message'）を送る */
	io.sockets.emit('message', '接続しました');
	
	/* クライアントからメッセージ（キーワード 'send'）を受取った時の処理*/
	socket.on('send', function(data){
		/* クライアントへメッセージ（キーワード 'message'）を送る */
		io.sockets.emit('message', data);
	});
	
	/* ページ遷移などで接続解除したときの処理 */
	socket.on('disconnect', function(){
		/* クライアントへメッセージ（キーワード 'message'）を送る */
		io.sockets.emit('message', '接続解除しました');
	});
});

info.log('http server start ' + portHttp);
debug.info('http server start ' + portHttp);
info.log('io server start ' + portIo);
debug.info('io server start ' + portIo);

debug.log('file end');